今天繼續來寫測試啦!!昨天我們測試destory方法後,今天我想寫store的測試。
首先,我們先測試成功的情境。
arrange
設定想要新增的資料
act
Route::post('/user', [UserController::class, 'store']);
assert
{‘success’ => ‘true’}
/**
* @test
* @testdox 成功註冊一筆資料
*/
public function storeSuccess()
{
//arrange
$id = 10;
$account = "JimChien";
$password = "123Acb_";
$username = "Jim";
// act&assert
$this->postJson("/api/user", [
'id'=>$id,
'account'=>$account,
'password'=>$password,
'username'=>$username
])
->assertStatus(200)
->assertJson([
'success' => 'true'
]);
}
再來是寫帳號重複註冊的案例
/**
* @test
*
*/
public function storeAccountRepeat()
{
//arrange
$id = 10;
$account = "JimChien";
$password = "123Acb_";
$username = "Jim";
User::create([
'id' => $id,
'account' => $account,
'password' => $password,
'name' => $username
]);
// act&assert
$this->postJson("/api/user", [
'id'=>$id,
'account'=>$account,
'password'=>$password,
'username'=>$username
])
->assertStatus(200)
->assertJson([
'success' => 'false',
'error'=> '帳號重複註冊'
]);
}
接下來寫的是密碼驗證的測試,這邊想利用data provider去提供一系列不合格的密碼去測試。
首先我們在UserTest寫一個method,提供你想要測試的資料,包含你想測試的所有情境
public function invalidPasswordProvider()
{
// 密碼長度不足6位
yield ["123"];
// 密碼不含大寫字母
yield ["123abc_"];
// 密碼不含小寫字母
yield ["123ABC_"];
// 密碼不含數字
yield ["ABCabc_"];
// 密碼不含特殊符號
yield ["ABCabcd"];
}
再利用dataProvider註解,將資料依序帶入method
/**
* @test
* @dataProvider invalidPasswordProvider
*/
public function storeAccountPasseordInvalid(string $password)
{
//arrange
$id = 10;
$account = "JimChien";
$username = "Jim";
// act&assert
$this->postJson("/api/user", [
'id'=>$id,
'account'=>$account,
'password'=>$password,
'username'=>$username
])
->assertStatus(200)
->assertJson([
'success' => 'false',
'error'=> '密碼需要6位數以上,並且至少包含大寫字母、小寫字母、數字、符號各一'
]);
}
來測試看看!
這邊有看到他幫我們帶入了那五筆資料,且測試成功!